From 1ad6f785ca1f32871666497d437183c79c32ebc6 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sat, 31 Oct 2015 10:03:18 -0700 Subject: [PATCH] Don't panic when printing the precise source id Closes #2094 --- src/cargo/core/source.rs | 12 +++++------- tests/test_cargo_compile_git_deps.rs | 11 +++++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/cargo/core/source.rs b/src/cargo/core/source.rs index d258b9f16..02f30533b 100644 --- a/src/cargo/core/source.rs +++ b/src/cargo/core/source.rs @@ -1,4 +1,4 @@ -use std::cmp::Ordering; +use std::cmp::{self, Ordering}; use std::collections::hash_map::{HashMap, Values, IterMut}; use std::fmt::{self, Formatter}; use std::hash; @@ -294,14 +294,12 @@ impl fmt::Display for SourceId { ref precise, .. } => { try!(write!(f, "{}{}", url, url_ref(reference))); - match *precise { - Some(ref s) => { - try!(write!(f, "#{}", &s[..8])); - } - None => {} + if let Some(ref s) = *precise { + let len = cmp::min(s.len(), 8); + try!(write!(f, "#{}", &s[..len])); } Ok(()) - }, + } SourceIdInner { kind: Kind::Registry, ref url, .. } => { write!(f, "registry {}", url) } diff --git a/tests/test_cargo_compile_git_deps.rs b/tests/test_cargo_compile_git_deps.rs index fcab5d846..e85853546 100644 --- a/tests/test_cargo_compile_git_deps.rs +++ b/tests/test_cargo_compile_git_deps.rs @@ -647,6 +647,17 @@ test!(update_with_shared_deps { .arg("-p").arg("dep1"), execs().with_stdout("")); + // Don't do anything bad on a weird --precise argument + println!("bar bad precise update"); + assert_that(p.cargo("update") + .arg("-p").arg("bar") + .arg("--precise").arg("0.1.2"), + execs().with_status(101).with_stderr("\ +Unable to update [..] + +To learn more, run the command again with --verbose. +")); + // Specifying a precise rev to the old rev shouldn't actually update // anything because we already have the rev in the db. println!("bar precise update"); -- 2.30.2